package com.stefanini.pe.bbva.bp.in.dao.impl;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.stefanini.pe.bbva.bp.in.dao.iface.UsuarioDAOIface;
import com.stefanini.pe.bbva.bp.in.to.Ejecutivo;
import com.stefanini.pe.bbva.bp.in.to.UsuarioAsesor;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Repository
public class UsuarioDAOImpl extends SqlMapClientDaoSupport implements
		UsuarioDAOIface {
	@Autowired
	public UsuarioDAOImpl(SqlMapClient sqlMapClient) {
		super();
		super.setSqlMapClient(sqlMapClient);
	}

	@SuppressWarnings("unchecked")
	public List<UsuarioAsesor> listarUsuarios(UsuarioAsesor usuario) {
		HashMap map = new HashMap();
		map.put("in_idtipoejecutivo", usuario.getIdTipoUsuario());
		map.put("in_nombreejecutivo", Util.getStringF(usuario.getNombreEjec()).trim().toUpperCase());
		map.put("in_nombreejecutivoacargo", Util.getStringF(usuario.getNombreEjecACargo()).trim().toUpperCase());
		
		System.out.println("sp: IIAF.PIIAF_ADMINISTRACION.sp_cons_ad_usuarios, params: "+map);
		getSqlMapClientTemplate().queryForList("BP_USUARIO_SqlMap.listarUsuarios", map);
		return (List) map.get("result");
	}

	@SuppressWarnings("unchecked")
	public List listaTiposSupervisor(String idTipoUsuario) {
		HashMap map = new HashMap();
		map.put("in_idtipoejecutivo", idTipoUsuario);
		getSqlMapClientTemplate().queryForList("BP_USUARIO_SqlMap.listarTiposSupervisor", map);
		return (List) map.get("result");
	}

	@SuppressWarnings("unchecked")
	public HashMap editarUsuario(UsuarioAsesor usuarioAsesor,
			UsuarioSesion usuarioSession) {
		HashMap map = new HashMap();
		try {
			map.put("in_idusuarioasesor", Integer.valueOf(usuarioAsesor
					.getIdUsuarioAsesor().toString().trim()));
			map.put("in_idtipoejecutivo", usuarioAsesor.getIdTipoEjecutivo());
			map.put("in_idsupervisor", Integer.valueOf(usuarioAsesor
					.getIdTipoSupervisor().toString().trim()));
			map.put("in_codregistro", usuarioAsesor.getCodRegistro());
			map.put("in_nombres", usuarioAsesor.getNombre());
			map.put("in_appaterno", usuarioAsesor.getApellidoPaterno());
			map.put("in_apmaterno", usuarioAsesor.getApellidoMaterno());
			map.put("in_tipodocumento", usuarioAsesor.getTipoDocumento());
			map.put("in_nrodocumento", usuarioAsesor.getNroDocumento());
			map.put("in_email", usuarioAsesor.getCorreo());
			map.put("in_emailcc", usuarioAsesor.getEmailcc());
			map.put("in_telefonos", usuarioAsesor.getTelefono());
			map.put("in_nroclientes", usuarioAsesor.getNroClientes());
			map.put("in_codregmodi", usuarioAsesor.getCodregmodi());
			map.put("in_fecmodi", usuarioAsesor.getFecmodi());
			map.put("in_terminalmodi", usuarioAsesor.getTerminalmodi());
			map.put("in_codaltamira",usuarioAsesor.getCodAltamira() != null ? usuarioAsesor
							.getCodAltamira().toString().trim() : "");
			
			System.out.println("sp: IIAF.PIIAF_ADMINISTRACION.sp_actu_ad_usuarios, param: "+map);
			getSqlMapClientTemplate().update("BP_USUARIO_SqlMap.editarUsuario",map);
			map.put("result", "ok");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("result", Util.obtenerMensajeError(e));
		}
		return map;
	}

	@SuppressWarnings("unchecked")
	public HashMap crearUsuario(UsuarioAsesor usuarioAsesor,
			UsuarioSesion usuarioSession) {
		HashMap map = new HashMap();
		try {
			map.put("in_idtipoejecutivo", usuarioAsesor.getIdTipoEjecutivo());
			map.put("in_idsupervisor", Integer.valueOf(usuarioAsesor
					.getIdTipoSupervisor().toString().trim()));
			map.put("in_codregistro", usuarioAsesor.getCodRegistro());
			map.put("in_nombres", usuarioAsesor.getNombre());
			map.put("in_appaterno", usuarioAsesor.getApellidoPaterno());
			map.put("in_apmaterno", usuarioAsesor.getApellidoMaterno());
			map.put("in_codoficina", usuarioAsesor.getCodOficina());
			map.put("in_tipodocumento", usuarioAsesor.getTipoDocumento());
			map.put("in_nrodocumento", usuarioAsesor.getNroDocumento());
			map.put("in_email", usuarioAsesor.getCorreo());
			map.put("in_emailcc", usuarioAsesor.getEmailcc());
			map.put("in_telefonos", usuarioAsesor.getTelefono());
			map.put("in_codregcrea", usuarioAsesor.getCodregcrea());
			map.put("in_feccrea", usuarioAsesor.getFeccrea());
			map.put("in_terminalcrea", usuarioAsesor.getTerminalcrea());
			map.put("in_codaltamira", usuarioAsesor.getCodAltamira() != null ? usuarioAsesor
							.getCodAltamira().toString().trim() : "");
			
			System.out.println("sp: IIAF.PIIAF_ADMINISTRACION.sp_inser_ad_usuarios, param: "+map);
			getSqlMapClientTemplate().update("BP_USUARIO_SqlMap.crearUsuario",map);
			map.put("result", "ok");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("result", Util.obtenerMensajeError(e));
		}
		return map;
	}

	@SuppressWarnings("unchecked")
	public HashMap eliminarUsuario(Long idUsuarioAsesor) {
		HashMap map = new HashMap();
		try {
			map.put("in_idusuarioasesor", new Integer(idUsuarioAsesor.toString()));
			getSqlMapClientTemplate().update("BP_USUARIO_SqlMap.eliminarUsuario", map);
			map.put("result", "ok");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("result", Util.obtenerMensajeError(e));
		}
		return map;
	}
	
	@SuppressWarnings("unchecked")
	public List<UsuarioAsesor> obtenerDatosUsuario(String codRegistro) throws Exception{
		HashMap map = new HashMap();
		map.put("codRegistro", codRegistro);
		getSqlMapClientTemplate().queryForList("BP_USUARIO_SqlMap.listarDatosUsuario", map);
		return (List) map.get("result");
	}
	
	@SuppressWarnings("unchecked")
	public List<Ejecutivo> listarClientesDeEjecutivos(String nombreCliente,
												       String nroDocuCliente,
												       String idTipoEjecAReasig,
												       String idUsuarioAsesor) throws Exception{
		HashMap map = new HashMap();
		map.put("nombres", nombreCliente == null || nombreCliente.trim().equals("") ? "" : nombreCliente.trim().toUpperCase());
		map.put("nrodocumento", nroDocuCliente == null || nroDocuCliente.trim().equals("") ? "" : nroDocuCliente.trim());
		map.put("idusuarioasesorselec", idTipoEjecAReasig == null || idTipoEjecAReasig.trim().equals("") ? "" : idTipoEjecAReasig.trim());
		map.put("idusuarioasesor", idUsuarioAsesor);
		
		System.out.println("sp: IIAF.PIIAF_ADMINISTRACION.sp_cons_ad_clientesdeejecutivo, param: "+map);
		getSqlMapClientTemplate().queryForList("BP_USUARIO_SqlMap.listarClientesDeEjecutivos", map);
		return (List<Ejecutivo>) map.get("result");
	}
	
	@SuppressWarnings("unchecked")
	public HashMap grabarClientesReasignados(Integer idUsuarioAsesorReasig,
										     String idTipoAsignacion,
										     String fechsExpiracion,
										     Integer idUsuarioAsesor,
										     String codsCliente,
										     String fechaRegistro,
										     String codRegModi,
										     String terminalModi) {
		HashMap map = new HashMap();
		try {
			map.put("in_idusuarioasesor_reasignado", idUsuarioAsesorReasig);
			map.put("in_tipoasignacion", idTipoAsignacion);
			map.put("in_fechaexpiracion", fechsExpiracion);
			map.put("in_idusuarioasesor", idUsuarioAsesor);
			map.put("in_codcliente", codsCliente);
			map.put("in_fecharegistro", fechaRegistro);
			map.put("in_codregmodi", codRegModi);
			map.put("in_terminalmodi", terminalModi);
			getSqlMapClientTemplate().update("BP_USUARIO_SqlMap.crearClientesReasignados", map);
			map.put("result", "ok");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("result", Util.obtenerMensajeError(e));
		}
		return map;
	}

	@SuppressWarnings("unchecked")
	public List<UsuarioAsesor> obtenerDatosUsuario_PorID(int codUsuario) {
		HashMap map = new HashMap();
		map.put("IN_IDUSUARIOASESOR", codUsuario);
		getSqlMapClientTemplate().queryForList("BP_USUARIO_SqlMap.listarDatosUsuarioPorId", map);
		return (List) map.get("result");
	}
	

}
